main(List<String> args) {
  var list = new List<String>();
  // list.add(1);
  list.add('1');

  var util = new Util<String>();
  // util.put(1);
  util.put('element');

  var u = new Utilss();
  u.put<String>('element');
  // u.put<int>('element');
}

/**
 * 泛型 <Type>
 * 
 * Dart中类型是可选的，可使用泛型限定类型
 * 使用泛型能够有效的减少代码重复
 */

/**
 * 类的泛型
 * 方法的泛型
 */
class Utils {
  int element;
  String elementStr;

  putInt(int element) {
    this.element = element;
  }

  putString(String element) {
    this.elementStr = element;
  }
}

class Util<T> {
  T element;

  put(T element) {
    this.element = element;
  }
}

class Utilss {
  put<T>(T element) {
    print(element);
  }
}
